#include<iostream>
#include<deque>
#include<cstring>
using namespace std;

int jsn, zwn, M, jsm[110], jsp[110], zwp[200010], zwm[200010];
int mp[1010] = {0};

int main() {
	cin >> jsn >> zwn >> M;
	for(int i=0; i<jsn; i++)	cin >> jsm[i];
	for(int i=0; i<jsn; i++)	cin >> jsp[i];
	for(int i=0; i<zwn; i++)	cin >> zwp[i];
	
//	计算出mp数组，其中 mp[i] 表示 i 元能产生的最大攻击力 
	for(int i=0; i<jsn; i++) {
		for(int j=jsm[i]; j<=M; j++)
			mp[j] = max(mp[j], mp[j-jsm[i]]+jsp[i]);
	}
	
//	换算出每个植物所需花费的最小代价 
	memset(zwm, 63, sizeof(zwm));
	for(int i=0; i<zwn; i++) {
		for(int j=0; j<=M; j++) {
			if(mp[j] >= zwp[i]) {
				zwm[i] = j;
				break;
			}
		}
	}
	
//	计算代价为 M 时最宽路径
	deque<int> dq;
	int cost = 0, maxx = 0;
	for(int i=0; i<zwn; i++) {
		if(zwm[i] <= M) {
			while(zwm[i] > M - cost) {
				cost -= dq.front();
				dq.pop_front();
			}
			cost += zwm[i];
			dq.push_back(zwm[i]);
			maxx = maxx > dq.size() ? maxx : dq.size();
		} else {
			dq.clear();
			cost = 0;
		}
	}
	cout << maxx << endl;
	
	return 0;
}